package liuyang.bigeventserver.modules.security.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.groups.Default;
import lombok.Data;
import net.sf.jsqlparser.statement.update.UpdateSet;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 用户表
 * @TableName user
 */
@TableName(value ="user")
@Data
public class User implements Serializable {

    // ///////////////////////////////////////////////////////
    // 校验分组 begin
    // 如果不指定组，默认校验jakarta.validation.groups.Default这个组
    // 如果指定组，那就按指定组的规则进行校验。
    public interface Add {}
    public interface Update {}
    // 校验分组 end

    /**
     * ID
     */
    @TableId(type = IdType.AUTO)
    @NotNull(groups = Update.class)// update
    private Long id;

    /**
     * 用户名
     */
    @Pattern(regexp = "^\\w{3,16}$", groups = Add.class)// insert
    private String username;

    /**
     * 密码
     */
    //@JsonIgnore// 不会出现在Json序列化后的字符串中 // 实测这个注释好像跟@Pattern有冲突。加上之后@Pattern就不生效了。
    @Pattern(regexp = "^\\w{3,16}$", groups = Add.class)// insert
    private String password;

    /**
     * 昵称
     */
    @NotEmpty// update
    @Pattern(regexp = "^\\w{1,10}$", groups = Update.class)// update
    private String nickname;

    /**
     * 邮箱
     */

    @NotEmpty(groups = Update.class)// update
    @Email(groups = Update.class)// update
    private String email;

    /**
     * 头像
     */
    private String userPic;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 修改时间
     */
    private LocalDateTime updateTime;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}